<template>
  <div class="page-scan">
  </div>
</template>
<script>

import wx from 'weixin-js-sdk';
import apiService from "@/api/apiService";
import {getSignUrl} from "@/utils";
export default {
  // eslint-disable-next-line vue/multi-word-component-names
  name: "Cv",

  data() {
    return {
      wechatConfig:null,
    }
  },

  props: {
    show: {
      type: Boolean,
      default: false
    },
    mode: {
      type: String,
      default: 'single'
    }
  },

  async mounted() {
    let signUrl = getSignUrl(this)
    apiService.get('/getWechatConfig?url='+signUrl).then(res => {
      // 将配置信息保存在组件的data对象中
      this.wechatConfig = res.data
      // 在获取到配置信息之后，调用微信Js-SDK的初始化函数
      this.initWechatJsSDK()
    }).catch(err => {
      this.$message.error(err)
    })
  },


  methods: {
    initWechatJsSDK () {
      // 设置微信Js-SDK的配置信息
      wx.config({
        debug: false,
        appId: this.wechatConfig.appId,
        timestamp: this.wechatConfig.timestamp,
        nonceStr: this.wechatConfig.nonceStr,
        signature: this.wechatConfig.signature,
        jsApiList: [
          // 需要使用的微信JS接口列表
          'scanQRCode'
        ]
      })

      // 在配置出错的情况下调用错误处理函数
      wx.error((err) => {
        this.$message.success('config-error: '+JSON.stringify(err))
        this.$emit('close-cv')
      })

      this.wxScanCode(this)
    },
    wxScanCode(_this) {
      // 配置完成后调用微信Js-SDK的ready函数
      wx.ready(() => {
        // 在ready函数中可以调用微信Js-SDK的其他接口
        wx.scanQRCode({
          needResult: 1, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
          scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码，默认二者都有
          success: res =>  {
            const result = res.resultStr.split(',').pop(); // 当needResult 为 1 时，扫码返回的结果
            // this.$message.success('scan-origin: '+JSON.stringify(res))
            if (_this.mode === 'single') {
              _this.$emit('scan-result', result)
            } else {
              _this.$emit('batch-scan-result', result)
              setTimeout(() => {
                _this.wxScanCode(_this)
              }, 1000)
            }

          },
          cancel:res=> {
            console.log(res)
            _this.$emit('close-cv')
          },
          fail:res=>  {
            console.log(res)
            _this.$emit('close-cv')
          },
          // complete:res=> {
          //   console.log(res)
          //   this.$emit('close-cv')
          // }
        });
      })
    }
  },

}
</script>

<style lang="less" scoped>

</style>